package com.example.jsoup.kuang.question.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by HMF on 2021/10/14 22:41
 */
public class NeedListUtil {

    // main函数测试代码，直接运行可以测试
//    public static void main(String[] args) {
//        List<Map<String, String>> needListReturnMapList = NeedListUtil.getNeedListReturnMapList(2, 1);
//        System.out.println("\n asdfasdf:::::  \n" + needListReturnMapList);
//    }

    /**
     * @param demand_type 【---人才需求 demand_type=1---】、【---技术需求 demand_type=2---】、【---服务需求 demand_type=3---】
     * @param pageIndex   【---页码 从 1 开始，需要循环递增1传入该值，获取下一页的数据---】
     * @return
     */
    public static List<Map<String, String>> getNeedListReturnMapList(int demand_type, int pageIndex) {
        // demand_type 只能为 1、2、3，不是其中之一时，返回 null
        if (demand_type == 1 || demand_type == 2 || demand_type == 3) {
//            String addressUrl = "https://www.kczg.org.cn/index/ajaxGetDemand?demand_type=1&industry_id=1&field_id=1&date_type=0&title=0&province_id=0&first_code=0&size_type=2&page=";
            String addressUrl = "https://www.kczg.org.cn/index/ajaxGetDemand?demand_type=" + demand_type + "&industry_id=" + demand_type + "&field_id=" + demand_type + "&date_type=0&title=0&province_id=0&first_code=0&size_type=2&page=";

            List<Map<String, String>> idAndUrlMapList = new ArrayList<>();

            // 创建Httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();

            // 问题库 技术需求 列表数据
            HttpPost httpPost = new HttpPost(addressUrl + pageIndex);

            // 请求头 user-agent
            httpPost.addHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.366");

            // 响应
            CloseableHttpResponse response = null;

            try {
                // 使用httpClient发起请求 获取 response
                response = httpClient.execute(httpPost);

                // 解析响应
                if (response.getStatusLine().getStatusCode() == 200) {

                    // 响应返回的json数据，但这里是String字符串类型，所以下面要做转换
                    String content = EntityUtils.toString(response.getEntity(), "utf8");

                    /////////////// 返回的 content json字符串解析 ////////////

                    // 把字符串转换为 json 对象
                    JSONObject jsonObject = JSON.parseObject(content);

                    // 通过已知的 key 键，获取 value 值
                    String data = jsonObject.get("data").toString(); // data 列表字符串

                    // 把 data 字符串列表 转为 类似 List 类型的数组
                    JSONArray jsonArray = new JSONArray(data);  // 使用这个包的 import org.json.JSONArray;

                    for (int i = 0; i < jsonArray.length(); i++) {
                        Map<String, String> map = new HashMap<>();

                        String id = jsonArray.getJSONObject(i).get("id").toString();
                        String url = jsonArray.getJSONObject(i).get("url").toString();

                        map.put("id", id);
                        map.put("url", url);

                        idAndUrlMapList.add(map);
                    }
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {

                try {
                    // 关闭httpClient
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    // 关闭response
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            // 返回结果列表
            return idAndUrlMapList;

        } else {  // demand_type 不是 1、2、3 其中一个时，返回 null
            return null;
        }
    }
}
